﻿using Aop.Api.Util;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using JumbotPay.API.Alipay.Mobile;
namespace JumbotPay.WebFile.Alipay_Mobile
{

    public partial class _notify_url : JumbotPay.UI.BasicPage
    {
        public string account_alipay = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            account_alipay = q("account_no");
            /* 实际验证过程建议商户添加以下校验。
            1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号，
            2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额），
            3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）
            4、验证app_id是否为该商户本身。
            */
            Dictionary<string, string> sArray = GetRequestPost();
            if (sArray.Count != 0)
            {
                Config conf = new Config(account_alipay);
                bool flag = AlipaySignature.RSACheckV1(sArray, conf.alipay_public_key, conf.charset, conf.sign_type, false);
                if (flag)
                {
                    //交易状态
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                    //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
                    //如果有做过处理，不执行商户的业务程序
                    string pay_order_id = Request.Form["trade_no"];              //支付宝交易号
                    string out_trade_no = Request.Form["out_trade_no"];	        //获取订单号
                    string total_amount = Request.Form["total_amount"];            //获取总金额
                    string seller_id = Request.Form["seller_id"];        //卖家商户号


                    object[] value = new JumbotPay.DAL.OrderDAL().GetOrderFields("alipay", out_trade_no, "", "appid");
                    string appid = value[0].ToString();



                    string _return_url = "";
                    string key = "";
                    doh.Reset();
                    doh.ConditionExpress = "appid=@appid";
                    doh.AddConditionParameter("@appid", appid);
                    object[] value2 = doh.GetFields("jpay_app", "return_url_mobile");
                    if (value2 != null)
                    {
                        _return_url = value2[0].ToString();

                        key = new JumbotPay.DAL.AppDAL().GetKey(appid);
                    }
                    else
                    {
                        Response.Write("app无效");
                        Response.End();
                    }



                    int pay_status = 1;//默认支付失败
                    if (new JumbotPay.DAL.OrderDAL().UpdateOrder("alipay", out_trade_no, pay_order_id))
                    {
                    }
                    pay_status = 0;
                    Response.Write("success");
                }
                else
                {
                    CYQ.Data.Log.WriteLogToTxt(Request.Url.ToString() + "<br />验签失败");
                    Response.Write("fail");
                }
            }
        }

        public Dictionary<string, string> GetRequestPost()
        {
            int i = 0;
            Dictionary<string, string> sArray = new Dictionary<string, string>();
            NameValueCollection coll;
            //coll = Request.Form;
            coll = Request.Form;
            String[] requestItem = coll.AllKeys;
            for (i = 0; i < requestItem.Length; i++)
            {
                sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
            }
            return sArray;

        }
    }
}